home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!zephyr!tektronix!tekgen!tekred!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v07i042: ularn - ultra-larn, an enhancement of the larn adventure game, Patch2a
- Message-ID: <4281@tekred.CNA.TEK.COM>
- Date: 19 Jul 89 14:13:14 GMT
- Sender: nobody@tekred.CNA.TEK.COM
- Lines: 1951
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted-by: "Scott S. Snyder" <ssnyder@tybalt.caltech.edu>
- Posting-number: Volume 7, Issue 42
- Archive-name: ularn/Patch2a
- Patch-To: ularn: Volume 7, Issue 1-9
-
-
- [[This posting contains patches to allow Ularn to compile and run on
- MS-DOS systems, using Turbo C v2.0.]]
-
- #! /bin/sh
- # This is a shell archive, meaning:
- # 1. Remove everything above the #! /bin/sh line.
- # 2. Save the resulting text in a file.
- # 3. Execute the file with /bin/sh (not csh) to create the files:
- # patch02.1
- # This archive created: Sun Jul 16 07:21:26 1989
- export PATH; PATH=/bin:$PATH
- echo shar: extracting "'patch02.1'" '(50636 characters)'
- if test -f 'patch02.1'
- then
- echo shar: will not over-write existing file "'patch02.1'"
- else
- sed 's/^X//' << \SHAR_EOF > 'patch02.1'
- Xdiff -c orig/README.dos new/README.dos
- X*** orig/README.dos Sun Jul 16 05:19:15 1989
- X--- new/README.dos Sun Jul 16 04:59:16 1989
- X***************
- X*** 0 ****
- X--- 1,84 ----
- X+
- X+ This set of patches will allow Ularn to compile and run under Mess-Dos
- X+ using Turbo C v2.0. Installation instructions, in brief:
- X+
- X+ 1. Apply the patches.
- X+ 2. Edit ularn.lnk, and change the directory names to wherever you keep the
- X+ Turbo C libraries.
- X+ 3. Rename 'makefile.tcc' to 'makefile'.
- X+ 4. Run make.
- X+ 5. Copy ularn.exe and the data files ufortune, uhelp, and umaps to wherever
- X+ you want to keep them.
- X+ 6. You must have ANSI.SYS (or NANSI.SYS) installed in order to use Ularn.
- X+ 7. When running the program, you can specify your character name on the
- X+ command line by using 'ularn character-name'. If you don't specify a
- X+ name on the command line or in an options file, you will be asked to
- X+ enter a name when the game starts.
- X+
- X+
- X+ The changes that I made fall into several classes:
- X+
- X+ New features:
- X+
- X+ 1. Graphics characters. You can specify arbitrary character codes to be
- X+ used for drawing the floor and walls of the dungeon. This is done by a
- X+ line in the options file of the form 'graphics: floor-code wall-code'.
- X+ For example, I use 'graphics: 176 178'.
- X+
- X+ 2. Swapping. If memory is limited, levels that are not currently in use
- X+ will be swapped out to disk. This feature is enabled by defining the
- X+ symbol SWAPPING when compiling savelev.c.
- X+
- X+ Warning: the savefile format has been changed. Finish any old games before
- X+ installing this version!
- X+
- X+
- X+ Modifications for MS-DOS:
- X+
- X+ 1. Location of options file. If an options file is specified on the command
- X+ line, Ularn will look for it there and abort if it isn't found. Otherwise,
- X+ Ularn will try to open the file 'ularnopt', first in the current directory,
- X+ and then in the directory in which ularn.exe is located.
- X+
- X+ 2. Location of data files. Ularn expects its data files to be in the
- X+ directory that ularn.exe is located in. This can be overridden by using
- X+ the 'larn-path:' keyword in the options file.
- X+
- X+ 3. Character name and save files. The character name can be specified on
- X+ the command line ('ularn character-name') or in the options file. If it
- X+ is given by both methods, the name specified on the command line takes
- X+ precedence. If it is given by neither, you will be asked to enter a name
- X+ when the game starts. The name used for the save file will be the first
- X+ eight characters of your character's name, followed by '.sav'. This can
- X+ be overridden, however, by using the 'savefile:' keyword in the options
- X+ file.
- X+
- X+ 4. Keypad support. If you have an IBM compatible and want to use the
- X+ keypad for movement, include the 'keypad' keyword in the options file.
- X+ You can then move around using the eight directional keys (Num Lock
- X+ should be _off_). You can run in a given direction by shifting a directional
- X+ key. Ins is equivalent to 'i' and Del is equivalent to '.'.
- X+
- X+ 5. NANSI support. If you are using NANSI.SYS instead of ANSI.SYS, you
- X+ should include the 'nansi' keyword in the options file. Ularn will then
- X+ use the insert-line and delete-line control sequences. If you have an IBM
- X+ compatible, you can also set the 'rawio' option, which results in faster
- X+ output.
- X+
- X+ 6. Screen color. You can specify the foreground and background colors
- X+ of the screen by using the options 'foreground:' and 'background:', e.g.,
- X+ 'foreground: magenta' or 'background: blue'. Most combinations look pretty
- X+ ghastly, though.
- X+
- X+
- X+ Bug fixes:
- X+
- X+ Mostly int/long mismatches. I also ran across a TC code generation bug
- X+ and had to rearrange several lines to avoid it. I'm sure there are still
- X+ some left, but I've already spent too much time ... um ... _testing_ this
- X+ program... :-)
- X+
- X+ Enjoy,
- X+
- X+ Scott Snyder
- X+ ssnyder@tybalt.caltech.edu
- Xdiff -c orig/Makefile.tcc new/Makefile.tcc
- X*** orig/Makefile.tcc Sun Jul 16 05:19:07 1989
- X--- new/Makefile.tcc Sun Jul 16 04:59:02 1989
- X***************
- X*** 0 ****
- X--- 1,57 ----
- X+ # your favorite compiler
- X+ CC = tcc
- X+
- X+ # user id of wizard (wizard password is defined in config.c)
- X+ WIZID = 0
- X+
- X+ # name of program
- X+ GAME = Ularn.exe
- X+
- X+ # program options
- X+ OPTIONS = -DWIZID=$(WIZID)
- X+
- X+ # compile flags
- X+ CFLAGS = -v -mh $(OPTIONS)
- X+
- X+ # link flags
- X+ LDFLAGS = /v
- X+
- X+ # the object files
- X+ OBJ = bill.obj config.obj create.obj data.obj diag.obj display.obj \
- X+ fortune.obj global.obj help.obj io.obj main.obj monster.obj \
- X+ moreobj.obj movem.obj object.obj regen.obj savelev.obj scores.obj \
- X+ signal.obj store.obj tok.obj nap.obj
- X+
- X+ # the source files
- X+ SRC = bill.c config.c create.c data.c diag.c display.c fortune.c\
- X+ global.c help.c io.c main.c monster.c moreobj.c movem.c object.c\
- X+ regen.c savelev.c scores.c signal.c store.c tok.c nap.c
- X+
- X+ # the header file
- X+ HDR = header.h
- X+
- X+ UTIL = to_ansi.exe
- X+ UTIL_OBJ = to_ansi.obj
- X+ UTIL_SRC = to_ansi.c
- X+
- X+ ##########################################################################
- X+
- X+ love: $(GAME) Uhelp
- X+
- X+ $(GAME): $(OBJ)
- X+ tlink $(LDFLAGS) @ularn.lnk
- X+
- X+ .c.obj:
- X+ $(CC) -c $(CFLAGS) $.
- X+
- X+ $(OBJ): header.h
- X+
- X+ $(UTIL): $(UTIL_SRC)
- X+ tcc $(UTIL_SRC)
- X+
- X+ #$(UTIL): $(UTIL_OBJ)
- X+ # $(CC) $(UTIL_OBJ)
- X+
- X+ Uhelp: $(UTIL) Uhelp.no_control
- X+ makehelp
- X+
- Xdiff -c orig/Uhelp.no_control new/Uhelp.no_control
- X*** orig/Uhelp.no_control Sun Jul 16 01:06:32 1989
- X--- new/Uhelp.no_control Sun Jul 16 05:03:58 1989
- X***************
- X*** 1,4 ****
- X! 5 Welcome to the game of Ularn. At this moment, you face a great problem.
- X Your daughter has contracted a strange disease, and none of your home remedies
- X seem to have any effect. You sense that she is in mortal danger, and you must
- X try to save her. Time ago you heard of a land of great danger and opportunity.
- X--- 1,4 ----
- X! 6 Welcome to the game of Ularn. At this moment, you face a great problem.
- X Your daughter has contracted a strange disease, and none of your home remedies
- X seem to have any effect. You sense that she is in mortal danger, and you must
- X try to save her. Time ago you heard of a land of great danger and opportunity.
- X***************
- X*** 107,118 ****
- X letter of name is monster's character.
- X savefile: save-file-name full pathname of savefile
- X character: character choose your character
- X
- X Your name and monster names must be enclosed in double quotation marks and may
- X be up to 34 characters long. Longer names are truncated. Anything enclosed in
- X quotation marks is considered one word, and must be separated from other words
- X by whitespace.
- X-
- X ^[[7mExplanation of the Ularn scoreboard facility^[[m
- X
- X Ularn supports TWO scoreboards, one for winners, and one for deceased
- X--- 107,118 ----
- X letter of name is monster's character.
- X savefile: save-file-name full pathname of savefile
- X character: character choose your character
- X+ graphics: floor-chr wall-chr char codes to use to draw floor and walls
- X
- X Your name and monster names must be enclosed in double quotation marks and may
- X be up to 34 characters long. Longer names are truncated. Anything enclosed in
- X quotation marks is considered one word, and must be separated from other words
- X by whitespace.
- X ^[[7mExplanation of the Ularn scoreboard facility^[[m
- X
- X Ularn supports TWO scoreboards, one for winners, and one for deceased
- X***************
- X*** 129,134 ****
- X--- 129,155 ----
- X at the time of his death.
- X
- X
- X+
- X+
- X+
- X+
- X+
- X+
- X+
- X+ ^[[7mAdditional options for MS-DOS^[[m
- X+
- X+ If you are running Ularn under MSDOS, there are several other options
- X+ which can be in your 'ularnopt' file:
- X+
- X+ Word Meaning
- X+ larn-path: directory the directory where the data files are kept
- X+ background: color the background screen color
- X+ foreground: color the foreground screel color
- X+ nansi you have NANSI.SYS installed instead of
- X+ ANSI.SYS.
- X+ rawio faster screen output (requires NANSI.SYS and
- X+ an IBM compatible)
- X+ keypad use the numeric keypad for movement
- X
- X
- X
- Xdiff -c orig/bill.c new/bill.c
- X*** orig/bill.c Sun Jul 16 00:59:47 1989
- X--- new/bill.c Sun Jul 16 04:38:37 1989
- X***************
- X*** 3,8 ****
- X--- 3,9 ----
- X #include "header.h"
- X
- X static char mail600[32];
- X+
- X /*
- X * function to create the tax bill for the user
- X */
- X***************
- X*** 9,20 ****
- X static int pid;
- X letter1()
- X {
- X sprintf(mail600, "/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600) < 0) {
- X write(1,"can't write 600 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X lprcat("From:");
- X lprcat(" the URS (Ularn Revenue Service)\n");
- X lprcat("\nSubject:");
- X--- 10,25 ----
- X static int pid;
- X letter1()
- X {
- X+ #ifdef __MSDOS__
- X+ clear();
- X+ #else
- X sprintf(mail600, "/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600,0) < 0) {
- X write(1,"can't write 600 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X+ #endif
- X lprcat("From:");
- X lprcat(" the URS (Ularn Revenue Service)\n");
- X lprcat("\nSubject:");
- X***************
- X*** 31,48 ****
- X lprcat("\nof this notice, and is due within 5 days. Failure to pay will");
- X lprcat("\nmean penalties. Once again, congratulations, We look forward");
- X lprcat("\nto your future successful expeditions.\n");
- X lwclose();
- X return(1);
- X }
- X
- X letter2()
- X {
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600) < 0) {
- X write(1,"can't write 601 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X lprcat("From:");
- X lprcat(" His Majesty King Wilfred of Ularndom\n");
- X lprcat("\nSubject:");
- X--- 36,62 ----
- X lprcat("\nof this notice, and is due within 5 days. Failure to pay will");
- X lprcat("\nmean penalties. Once again, congratulations, We look forward");
- X lprcat("\nto your future successful expeditions.\n");
- X+
- X+ #ifdef __MSDOS__
- X+ retcont();
- X+ #else
- X lwclose();
- X+ #endif
- X return(1);
- X }
- X
- X letter2()
- X {
- X+ #ifdef __MSDOS__
- X+ clear();
- X+ #else
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600,0) < 0) {
- X write(1,"can't write 601 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X+ #endif
- X lprcat("From:");
- X lprcat(" His Majesty King Wilfred of Ularndom\n");
- X lprcat("\nSubject:");
- X***************
- X*** 56,73 ****
- X lprcat("\nhonour of Knightess of the realm. Upon thy name shall it be written. . .");
- X lprcat("\nBravery and courage be yours.");
- X lprcat("\nMay you live in happiness forevermore . . .\n");
- X lwclose();
- X return(1);
- X }
- X
- X letter3()
- X {
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600) < 0) {
- X write(1,"can't write 602 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X lprcat("From:");
- X lprcat(" Count Endelford\n");
- X lprcat("\nSubject:");
- X--- 70,95 ----
- X lprcat("\nhonour of Knightess of the realm. Upon thy name shall it be written. . .");
- X lprcat("\nBravery and courage be yours.");
- X lprcat("\nMay you live in happiness forevermore . . .\n");
- X+ #ifdef __MSDOS__
- X+ retcont();
- X+ #else
- X lwclose();
- X+ #endif
- X return(1);
- X }
- X
- X letter3()
- X {
- X+ #ifdef __MSDOS__
- X+ clear();
- X+ #else
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600,0) < 0) {
- X write(1,"can't write 602 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X+ #endif
- X lprcat("From:");
- X lprcat(" Count Endelford\n");
- X lprcat("\nSubject:");
- X***************
- X*** 83,100 ****
- X lprcat("With several attempts I have yet to endure the");
- X lprcat(" caves,\nand you, a nobody, makes the journey! From this time");
- X lprcat(" onward, bewarned\nupon our meeting you shall pay the price!\n");
- X lwclose();
- X return(1);
- X }
- X
- X letter4()
- X {
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600) < 0) {
- X write(1,"can't write 603 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X lprcat("From:");
- X lprcat(" Mainair, Duke of Ularnty\n");
- X lprcat("\nSubject:");
- X--- 105,130 ----
- X lprcat("With several attempts I have yet to endure the");
- X lprcat(" caves,\nand you, a nobody, makes the journey! From this time");
- X lprcat(" onward, bewarned\nupon our meeting you shall pay the price!\n");
- X+ #ifdef __MSDOS__
- X+ retcont();
- X+ #else
- X lwclose();
- X+ #endif
- X return(1);
- X }
- X
- X letter4()
- X {
- X+ #ifdef __MSDOS__
- X+ clear();
- X+ #else
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600,0) < 0) {
- X write(1,"can't write 603 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X+ #endif
- X lprcat("From:");
- X lprcat(" Mainair, Duke of Ularnty\n");
- X lprcat("\nSubject:");
- X***************
- X*** 105,122 ****
- X lprcat("\nyearn to behold his anger and jealously. Should ye choose to");
- X lprcat("\nunleash some of thy wealth upon those who be unfortunate, I,");
- X lprcat("\nDuke Mainair, Shall equal thy gift also.\n");
- X lwclose();
- X return(1);
- X }
- X
- X letter5()
- X {
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600) < 0) {
- X write(1,"can't write 604 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X lprcat("From:");
- X lprcat(" St. Mary's Children's Home\n");
- X lprcat("\nSubject:");
- X--- 135,160 ----
- X lprcat("\nyearn to behold his anger and jealously. Should ye choose to");
- X lprcat("\nunleash some of thy wealth upon those who be unfortunate, I,");
- X lprcat("\nDuke Mainair, Shall equal thy gift also.\n");
- X+ #ifdef __MSDOS__
- X+ retcont();
- X+ #else
- X lwclose();
- X return(1);
- X+ #endif
- X }
- X
- X letter5()
- X {
- X+ #ifdef __MSDOS__
- X+ clear();
- X+ #else
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600,0) < 0) {
- X write(1,"can't write 604 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X+ #endif
- X lprcat("From:");
- X lprcat(" St. Mary's Children's Home\n");
- X lprcat("\nSubject:");
- X***************
- X*** 133,150 ****
- X lprcat("\ngood food. Could you possibly find it in your heart to help us");
- X lprcat("\nin our plight? Whatever you could give will help much.");
- X lprcat("\n(your gift is tax deductible)\n");
- X lwclose();
- X return(1);
- X }
- X
- X letter6()
- X {
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600) < 0) {
- X write(1,"can't write 605 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X lprcat("From:");
- X lprcat(" The National Dianthroritis Society of Ularn\n");
- X lprcat("\nSubject:");
- X--- 171,196 ----
- X lprcat("\ngood food. Could you possibly find it in your heart to help us");
- X lprcat("\nin our plight? Whatever you could give will help much.");
- X lprcat("\n(your gift is tax deductible)\n");
- X+ #ifdef __MSDOS__
- X+ retcont();
- X+ #else
- X lwclose();
- X+ #endif
- X return(1);
- X }
- X
- X letter6()
- X {
- X+ #ifdef __MSDOS__
- X+ clear();
- X+ #else
- X sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
- X! if (lcreat(mail600,0) < 0) {
- X write(1,"can't write 605 letter\n",23);
- X return(0);
- X }
- X lprcat("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- X+ #endif
- X lprcat("From:");
- X lprcat(" The National Dianthroritis Society of Ularn\n");
- X lprcat("\nSubject:");
- X***************
- X*** 159,165 ****
- X--- 205,215 ----
- X lprcat("\ndreaded disease, and you can help today. Could you please see it");
- X lprcat("\nin your heart to give generously? Your continued good health");
- X lprcat("\ncan be your everlasting reward.\n");
- X+ #ifdef __MSDOS__
- X+ retcont();
- X+ #else
- X lwclose();
- X+ #endif
- X return(1);
- X }
- X
- X***************
- X*** 175,191 ****
- X--- 225,247 ----
- X register int i;
- X char buf[128];
- X
- X+ #ifndef __MSDOS__
- X wait(0);
- X pid=getpid();
- X if (fork() == 0) {
- X+ #endif
- X resetscroll();
- X for (i=0; i<sizeof(pfn)/sizeof(int (*)()); i++)
- X if ((*pfn[i])()) {
- X+ #ifndef __MSDOS__
- X sleep(20);
- X sprintf(buf,"mail %s < %s",loginname,mail600);
- X system(buf);
- X unlink(mail600);
- X+ #endif
- X }
- X+ #ifndef __MSDOS__
- X exit(0);
- X }
- X+ #endif
- X }
- Xdiff -c orig/config.c new/config.c
- X*** orig/config.c Sun Jul 16 01:06:34 1989
- X--- new/config.c Sun Jul 16 04:49:20 1989
- X***************
- X*** 7,32 ****
- X */
- X #include "header.h"
- X
- X /* the game save filename */
- X char savefilename[SAVEFILENAMESIZE] = HOME;
- X
- X /* the score file */
- X! char scorefile[sizeof(HOME)+sizeof(SCORENAME)] = HOME;
- X
- X /* the logging file */
- X! char logfile[sizeof(HOME)+sizeof(LOGFNAME)] = HOME;
- X
- X /* the help text file */
- X! char helpfile[sizeof(HOME)+sizeof(HELPNAME)] = HOME;
- X
- X /* the maze data file */
- X! char larnlevels[sizeof(HOME)+sizeof(LEVELSNAME)] = HOME;
- X
- X /* the fortune data file */
- X! char fortfile[sizeof(HOME)+sizeof(FORTSNAME)] = HOME;
- X
- X /* the .Ularnopts filename */
- X! char optsfile[128] ="/.Ularnopts"; /* the option file */
- X
- X char diagfile[] ="Diagfile"; /* the diagnostic filename */
- X char ckpfile[] ="Ularn.ckp"; /* the checkpoint filename */
- X--- 7,43 ----
- X */
- X #include "header.h"
- X
- X+ #ifdef __MSDOS__
- X+
- X+ # define HOMESIZE SAVEFILENAMESIZE
- X+ # define HOME ""
- X+
- X+ #else
- X+
- X+ # define HOMESIZE sizeof(HOME)
- X+
- X+ #endif
- X+
- X /* the game save filename */
- X char savefilename[SAVEFILENAMESIZE] = HOME;
- X
- X /* the score file */
- X! char scorefile[HOMESIZE+sizeof(SCORENAME)] = HOME;
- X
- X /* the logging file */
- X! char logfile[HOMESIZE+sizeof(LOGFNAME)] = HOME;
- X
- X /* the help text file */
- X! char helpfile[HOMESIZE+sizeof(HELPNAME)] = HOME;
- X
- X /* the maze data file */
- X! char larnlevels[HOMESIZE+sizeof(LEVELSNAME)] = HOME;
- X
- X /* the fortune data file */
- X! char fortfile[HOMESIZE+sizeof(FORTSNAME)] = HOME;
- X
- X /* the .Ularnopts filename */
- X! char optsfile[SAVEFILENAMESIZE] ="/.Ularnopts"; /* the option file */
- X
- X char diagfile[] ="Diagfile"; /* the diagnostic filename */
- X char ckpfile[] ="Ularn.ckp"; /* the checkpoint filename */
- Xdiff -c orig/create.c new/create.c
- X*** orig/create.c Sun Jul 16 01:02:19 1989
- X--- new/create.c Sun Jul 16 04:44:41 1989
- X***************
- X*** 136,142 ****
- X for (i=mxl; i<mxh; i++)
- X for (j=myl; j<myh; j++) {
- X item[i][j]=0;
- X! if ((mitem[i][j]=z))
- X hitp[i][j]=monster[z].hitpoints;
- X }
- X }
- X--- 136,142 ----
- X for (i=mxl; i<mxh; i++)
- X for (j=myl; j<myh; j++) {
- X item[i][j]=0;
- X! if ((mitem[i][j]=z)!=0)
- X hitp[i][j]=monster[z].hitpoints;
- X }
- X }
- X***************
- X*** 219,225 ****
- X register int i,j;
- X int it,arg,mit,marg;
- X
- X! if (lopen(larnlevels)<0) {
- X write(1,"Can't open the maze data file\n",30);
- X died(-282);
- X return(0);
- X--- 219,225 ----
- X register int i,j;
- X int it,arg,mit,marg;
- X
- X! if (lopen(larnlevels, 0)<0) {
- X write(1,"Can't open the maze data file\n",30);
- X died(-282);
- X return(0);
- X***************
- X*** 630,636 ****
- X if ((item[x][y]==0) && (mitem[x][y]==0) &&
- X ((playerx!=x) || (playery!=y))) {
- X mitem[x][y] = what;
- X! know[x][y]=0;
- X hitp[x][y] = monster[what].hitpoints;
- X return(0);
- X }
- X--- 630,636 ----
- X if ((item[x][y]==0) && (mitem[x][y]==0) &&
- X ((playerx!=x) || (playery!=y))) {
- X mitem[x][y] = what;
- X! if (know[x][y]) know[x][y] = 2;
- X hitp[x][y] = monster[what].hitpoints;
- X return(0);
- X }
- Xdiff -c orig/data.c new/data.c
- X*** orig/data.c Sun Jul 16 01:00:56 1989
- X--- new/data.c Sun Jul 16 04:40:23 1989
- X***************
- X*** 74,87 ****
- X
- X char *lpbuf,*lpnt,
- X *inbuffer,*lpend; /* input/output pointers to the buffers */
- X- struct cel *cell; /* pointer to the dungeon storage */
- X short hitp[MAXX][MAXY]; /* monster hp on level */
- X short iarg[MAXX][MAXY]; /* arg for the item array */
- X char item[MAXX][MAXY]; /* objects in maze if any */
- X! char know[MAXX][MAXY]; /* 1 or 0 if here before */
- X char mitem[MAXX][MAXY]; /* monster item array */
- X char moved[MAXX][MAXY]; /* monster movement flags */
- X! char stealth[MAXX][MAXY];/* 0=sleeping 1=awake monst */
- X char iven[26]; /* inventory for player */
- X short ivenarg[26]; /* inventory args for player */
- X char lastmonst[40]; /*this has the name of the current monster*/
- X--- 74,87 ----
- X
- X char *lpbuf,*lpnt,
- X *inbuffer,*lpend; /* input/output pointers to the buffers */
- X short hitp[MAXX][MAXY]; /* monster hp on level */
- X short iarg[MAXX][MAXY]; /* arg for the item array */
- X char item[MAXX][MAXY]; /* objects in maze if any */
- X! char know[MAXX][MAXY]; /* 1 or 0 if here before; 2 if we know there's */
- X! /* floor here, but not what's on top */
- X char mitem[MAXX][MAXY]; /* monster item array */
- X char moved[MAXX][MAXY]; /* monster movement flags */
- X! char stealth[MAXX][MAXY]; /* 0=sleeping 1=awake monst */
- X char iven[26]; /* inventory for player */
- X short ivenarg[26]; /* inventory args for player */
- X char lastmonst[40]; /*this has the name of the current monster*/
- X***************
- X*** 796,798 ****
- X--- 796,799 ----
- X char nplt[] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 4 };
- X char ndgg[] = { 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 5 };
- X char nsw[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3 };
- X+
- Xdiff -c orig/diag.c new/diag.c
- X*** orig/diag.c Sun Jul 16 01:02:52 1989
- X--- new/diag.c Sun Jul 16 04:54:19 1989
- X***************
- X*** 2,8 ****
- X #include "header.h"
- X
- X extern long int initialtime;
- X! extern int rmst,maxitm,lasttime;
- X extern char nosignal;
- X
- X char *cdef[] = {
- X--- 2,8 ----
- X #include "header.h"
- X
- X extern long int initialtime;
- X! extern int maxitm;
- X extern char nosignal;
- X
- X char *cdef[] = {
- X***************
- X*** 75,81 ****
- X
- X fprintf(dfile, "Hit points: %2ld(%2ld)\n", c[HP], c[HPMAX]);
- X
- X! fprintf(dfile, "gold: %ld Experience: %ld Character level: %d Level in caverns: %ld\n",
- X (long) c[GOLD],
- X (long) c[EXPERIENCE],
- X (long) c[LEVEL],
- X--- 75,81 ----
- X
- X fprintf(dfile, "Hit points: %2ld(%2ld)\n", c[HP], c[HPMAX]);
- X
- X! fprintf(dfile, "gold: %ld Experience: %ld Character level: %ld Level in caverns: %d\n",
- X (long) c[GOLD],
- X (long) c[EXPERIENCE],
- X (long) c[LEVEL],
- X***************
- X*** 193,448 ****
- X /* east west walls of this line */
- X for (i = 0; i < MAXY; i++) {
- X for (j = 0; j < MAXX; j++)
- X! if (k = mitem[j][i])
- X fprintf(dfile, "%c", monstnamelist[k]);
- X else
- X fprintf(dfile, "%c", objnamelist[item[j][i]]);
- X fprintf(dfile, "\n");
- X }
- X- }
- X- /*
- X- to save the game in a file
- X- */
- X- static long int zzz=0;
- X- savegame(fname)
- X- char *fname;
- X- {
- X- register int i,k;
- X- register struct sphere *sp;
- X- struct stat statbuf;
- X-
- X- nosignal=1;
- X- lflush();
- X- savelevel();
- X- ointerest();
- X- if (lcreat(fname) < 0) {
- X- lcreat((char*)0);
- X- lprintf("\nCan't open file <%s> to save game\n",fname);
- X- nosignal=0;
- X- return(-1);
- X- }
- X-
- X- set_score_output();
- X- lwrite((char*)beenhere,MAXLEVEL+MAXVLEVEL);
- X- for (k=0; k<MAXLEVEL+MAXVLEVEL; k++)
- X- if (beenhere[k])
- X- lwrite((char*)&cell[k*MAXX*MAXY],sizeof(struct cel)*MAXY*MAXX);
- X- lwrite((char*)&c[0],100*sizeof(long));
- X- lprint((long)gtime);
- X- lprc(level);
- X- lprc(playerx);
- X- lprc(playery);
- X- lwrite((char*)iven,26);
- X- lwrite((char*)ivenarg,26*sizeof(short));
- X- lwrite((char*)char_class,20);
- X- for (k=0; k<MAXSCROLL; k++) lprc(scrollname[k][0]);
- X- for (k=0; k<MAXPOTION; k++) lprc(potionname[k][0]);
- X- lwrite((char*)spelknow,SPNUM);
- X- lprc(wizard);
- X- lprc(rmst); /* random monster generation counter */
- X- for (i=0; i<90; i++) lprc(itm[i].qty);
- X- lwrite((char*)course,25);
- X- lprc(cheat);
- X-
- X- /* genocide info */
- X- for (i=0; i<MAXMONST; i++) lprc(monster[i].genocided);
- X-
- X- /* save spheres of annihilation */
- X- for (sp=spheres; sp; sp=sp->p)
- X- lwrite((char*)sp,sizeof(struct sphere));
- X-
- X- time(&zzz);
- X- lprint((long)(zzz-initialtime));
- X- lwrite((char*)&zzz,sizeof(long));
- X-
- X- if (fstat(lfd,&statbuf)< 0) lprint(0L);
- X- else
- X- lprint((long)statbuf.st_ino); /* inode # */
- X-
- X- lwclose();
- X- lastmonst[0] = 0;
- X- lcreat((char*)0);
- X- nosignal=0;
- X- return(0);
- X- }
- X-
- X- restoregame(fname)
- X- char *fname;
- X- {
- X- register int i,k;
- X- register struct sphere *sp,*sp2;
- X- struct stat filetimes;
- X-
- X- cursors();
- X- lprcat("\nRestoring . . .");
- X- lflush();
- X- if (lopen(fname) <= 0) {
- X- lcreat((char*)0);
- X- lprintf("\nCan't open file <%s> to restore game\n",fname);
- X- nap(2000);
- X- c[GOLD]=c[BANKACCOUNT]=0;
- X- died(-265);
- X- return;
- X- }
- X-
- X- lrfill((char*)beenhere,MAXLEVEL+MAXVLEVEL);
- X- for (k=0; k<MAXLEVEL+MAXVLEVEL; k++)
- X- if (beenhere[k])
- X- lrfill((char*)&cell[k*MAXX*MAXY],sizeof(struct cel)*MAXY*MAXX);
- X-
- X- lrfill((char*)&c[0],100*sizeof(long));
- X- gtime = lrint();
- X- level = c[CAVELEVEL] = lgetc();
- X-
- X- playerx = lgetc();
- X- playery = lgetc();
- X-
- X- lrfill((char*)iven,26);
- X- lrfill((char*)ivenarg,26*sizeof(short));
- X- lrfill((char*)char_class,20);
- X-
- X- for (k=0; k<MAXSCROLL; k++) scrollname[k][0] = lgetc();
- X- for (k=0; k<MAXPOTION; k++) potionname[k][0] = lgetc();
- X-
- X- lrfill((char*)spelknow,SPNUM);
- X-
- X- wizard = lgetc();
- X- rmst = lgetc(); /* random monster creation flag */
- X-
- X- for (i=0; i<90; i++)
- X- itm[i].qty = lgetc();
- X-
- X- lrfill((char*)course,25);
- X- cheat = lgetc();
- X-
- X- /* genocide info */
- X- for (i=0; i<MAXMONST; i++) monster[i].genocided=lgetc();
- X-
- X- for (sp=0,i=0; i<c[SPHCAST]; i++) {
- X- sp2 = sp;
- X- sp = (struct sphere *)malloc(sizeof(struct sphere));
- X- if (sp==0) {
- X- fprintf(stderr, "Can't malloc() for sphere space\n");
- X- break;
- X- }
- X- /* get spheres of annihilation */
- X- lrfill((char*)sp,sizeof(struct sphere));
- X- sp->p=0; /* null out pointer */
- X- if (i==0) spheres=sp; /* beginning of list */
- X- else sp2->p = sp;
- X- }
- X-
- X-
- X- time(&zzz);
- X- initialtime = zzz-lrint();
- X-
- X- fstat(fd,&filetimes);/*get the creation and modification time of file*/
- X-
- X- lrfill((char*)&zzz,sizeof(long));
- X-
- X- zzz += 6;
- X- if (filetimes.st_ctime > zzz)
- X- fsorry(); /*file create time */
- X- else if (filetimes.st_mtime > zzz)
- X- fsorry(); /* file modify time*/
- X-
- X-
- X- if (c[HP]<0) {
- X- died(284);
- X- return;
- X- } /* died a post mortem death */
- X-
- X- oldx = oldy = 0;
- X-
- X- i = lrint(); /* inode # */
- X- if (i && (filetimes.st_ino!=i))
- X- fsorry(); /* different inode number, file was copied */
- X-
- X- lrclose();
- X-
- X- if (strcmp(fname,ckpfile) == 0) {
- X- if (lappend(fname) < 0)
- X- fcheat();
- X- else {
- X- lprc(' ');
- X- lwclose();
- X- }
- X- lcreat((char*)0);
- X- }
- X- else if (unlink(fname) < 0)
- X- fcheat(); /* can't unlink save file */
- X-
- X- /* for the greedy cheater checker */
- X- /* for (k=0; k<6; k++) if (c[k]>99) greedy();
- X- if (c[HPMAX]>999 || c[SPELLMAX]>125) greedy(); */
- X- if (c[LEVEL]==25 && c[EXPERIENCE]>skill[24]) {
- X- long tmp = c[EXPERIENCE]-skill[24]; /* amount to go up */
- X- c[EXPERIENCE] = skill[24];
- X- raiseexperience((long)tmp);
- X- }
- X- getlevel();
- X- lasttime=gtime;
- X-
- X- for (k=0; k<26; k++)
- X- if (iven[k] == OLARNEYE) {
- X- monstnamelist[DEMONLORD] = '1';
- X- monstnamelist[DEMONLORD+1] = '2';
- X- monstnamelist[DEMONLORD+2] = '3';
- X- monstnamelist[DEMONLORD+3] = '4';
- X- monstnamelist[DEMONLORD+4] = '5';
- X- monstnamelist[DEMONLORD+5] = '6';
- X- monstnamelist[DEMONLORD+6] = '7';
- X- monstnamelist[DEMONPRINCE] = '9';
- X- monstnamelist[LUCIFER] = '0';
- X- break;
- X- }
- X- }
- X-
- X- /*
- X- subroutine to not allow greedy cheaters
- X- */
- X- greedy()
- X- {
- X- if (wizard) return;
- X-
- X- lprcat("\n\nI am so sorry, but your character is a little TOO good! Since this\n");
- X- lprcat("cannot normally happen from an honest game, I must assume that you cheated.\n");
- X- lprcat("In that you are GREEDY as well as a CHEATER, I cannot allow this game\n");
- X- lprcat("to continue.\n");
- X- nap(5000);
- X- c[GOLD]=c[BANKACCOUNT]=0;
- X- died(-267);
- X- return;
- X- }
- X-
- X- /*
- X- subroutine to not allow altered save files and terminate the attempted
- X- restart
- X- */
- X- fsorry()
- X- {
- X- if(cheat) return;
- X- lprcat("\nSorry, but your savefile has been altered.\n");
- X- lprcat("However, seeing as I am a good sport, I will let you play.\n");
- X- lprcat("Be advised though, you won't be placed on the scoreboard.");
- X- cheat = 1;
- X- nap(4000);
- X- }
- X-
- X- /*
- X- subroutine to not allow game if save file can't be deleted
- X- */
- X- fcheat()
- X- {
- X- if (wizard) return;
- X- if(cheat) return;
- X-
- X- lprcat("\nSorry, but your savefile can't be deleted. This can only mean\n");
- X- lprcat("that you tried to CHEAT by protecting the directory the savefile\n");
- X- lprcat("is in. Since this is unfair to the rest of the Ularn community, I\n");
- X- lprcat("cannot let you play this game.\n");
- X- nap(5000);
- X- c[GOLD]=c[BANKACCOUNT]=0;
- X- died(-268);
- X- return;
- X }
- X--- 193,202 ----
- X /* east west walls of this line */
- X for (i = 0; i < MAXY; i++) {
- X for (j = 0; j < MAXX; j++)
- X! if ((k = mitem[j][i])!=0)
- X fprintf(dfile, "%c", monstnamelist[k]);
- X else
- X fprintf(dfile, "%c", objnamelist[item[j][i]]);
- X fprintf(dfile, "\n");
- X }
- X }
- Xdiff -c orig/display.c new/display.c
- X*** orig/display.c Sun Jul 16 01:02:58 1989
- X--- new/display.c Sun Jul 16 04:46:58 1989
- X***************
- X*** 1,7 ****
- X /* display.c */
- X #include "header.h"
- X
- X! #define makecode(_a,_b,_c) (((_a)<<16) + ((_b)<<8) + (_c))
- X
- X static int minx,maxx,miny,maxy,k,m;
- X static char bot1f=0,bot2f=0,bot3f=0;
- X--- 1,7 ----
- X /* display.c */
- X #include "header.h"
- X
- X! #define makecode(_a,_b,_c) (((long)(_a)<<16) + ((_b)<<8) + (_c))
- X
- X static int minx,maxx,miny,maxy,k,m;
- X static char bot1f=0,bot2f=0,bot3f=0;
- X***************
- X*** 200,206 ****
- X }
- X
- X botsub(idx,str)
- X! register int idx;
- X char *str;
- X {
- X register int x,y;
- X--- 200,206 ----
- X }
- X
- X botsub(idx,str)
- X! register long idx;
- X char *str;
- X {
- X register int x,y;
- X***************
- X*** 274,281 ****
- X for (i=d_ymin; i<d_ymax; i++)
- X for (j=d_xmin; j<d_xmax; j++)
- X if (know[j][i]==0) screen[j][i] = ' ';
- X else
- X! if (k=mitem[j][i]) {
- X if (k==MIMIC)
- X screen[j][i] =
- X monstnamelist[rund(MAXMONST)];
- X--- 274,283 ----
- X for (i=d_ymin; i<d_ymax; i++)
- X for (j=d_xmin; j<d_xmax; j++)
- X if (know[j][i]==0) screen[j][i] = ' ';
- X+ else if (know[j][i]==2)
- X+ screen[j][i] = objnamelist[0];
- X else
- X! if ((k=mitem[j][i])!=0) {
- X if (k==MIMIC)
- X screen[j][i] =
- X monstnamelist[rund(MAXMONST)];
- X***************
- X*** 284,291 ****
- X }
- X else
- X if ((k=item[j][i])==OWALL)
- X! screen[j][i] = '#';
- X! else screen[j][i] = ' ';
- X
- X for (i=d_ymin; i<d_ymax; i++) {
- X j=d_xmin;
- X--- 286,294 ----
- X }
- X else
- X if ((k=item[j][i])==OWALL)
- X! screen[j][i] = objnamelist[OWALL];
- X! else
- X! screen[j][i] = objnamelist[0];
- X
- X for (i=d_ymin; i<d_ymax; i++) {
- X j=d_xmin;
- X***************
- X*** 316,325 ****
- X
- X for (lastx=lasty=127, i=d_ymin; i<d_ymax; i++)
- X for (j=d_xmin; j<d_xmax; j++) {
- X! if (k=item[j][i])
- X if (k != OWALL)
- X if ((know[j][i]) && (mitem[j][i]==0))
- X! if (objnamelist[k]!=' ') {
- X if (lasty!=i+1 || lastx!=j)
- X cursor(lastx=j+1,lasty=i+1);
- X else lastx++;
- X--- 319,328 ----
- X
- X for (lastx=lasty=127, i=d_ymin; i<d_ymax; i++)
- X for (j=d_xmin; j<d_xmax; j++) {
- X! if ((k=item[j][i])!=0)
- X if (k != OWALL)
- X if ((know[j][i]) && (mitem[j][i]==0))
- X! if (objnamelist[k]!=objnamelist[0]) {
- X if (lasty!=i+1 || lastx!=j)
- X cursor(lastx=j+1,lasty=i+1);
- X else lastx++;
- X***************
- X*** 370,379 ****
- X
- X for (j=miny; j<=maxy; j++)
- X for (m=minx; m<=maxx; m++)
- X! if (know[m][j]==0) {
- X cursor(m+1,j+1);
- X x=maxx;
- X! while (know[x][j]) --x;
- X for (i=m; i<=x; i++) {
- X if ((k=mitem[i][j]) != 0) {
- X if (k==MIMIC)
- X--- 373,382 ----
- X
- X for (j=miny; j<=maxy; j++)
- X for (m=minx; m<=maxx; m++)
- X! if ((know[m][j] & 1)==0) {
- X cursor(m+1,j+1);
- X x=maxx;
- X! while (know[x][j] & 1) --x;
- X for (i=m; i<=x; i++) {
- X if ((k=mitem[i][j]) != 0) {
- X if (k==MIMIC)
- Xdiff -c orig/fortune.c new/fortune.c
- X*** orig/fortune.c Sun Jul 16 01:03:01 1989
- X--- new/fortune.c Sun Jul 16 04:58:04 1989
- X***************
- X*** 31,37 ****
- X }
- X
- X /* read in the entire fortune file */
- X! if (read(fd,base,stat.st_size) != stat.st_size) {
- X close(fd);
- X fd= -1;
- X free((char*)base);
- X--- 31,37 ----
- X }
- X
- X /* read in the entire fortune file */
- X! if ((stat.st_size = read(fd,base,stat.st_size)) == -1) {
- X close(fd);
- X fd= -1;
- X free((char*)base);
- Xdiff -c orig/global.c new/global.c
- X*** orig/global.c Sun Jul 16 01:02:28 1989
- X--- new/global.c Sun Jul 16 04:46:04 1989
- X***************
- X*** 300,309 ****
- X
- X if (lev < 5)
- X while (tmp==WATERLORD)
- X! tmp=rnd((x=monstlevel[lev-1])?x:1);
- X
- X else while (tmp==WATERLORD)
- X! tmp=rnd((x=monstlevel[lev-1]-monstlevel[lev-4])?x:1)+monstlevel[lev-4];
- X
- X while (monster[tmp].genocided && tmp<MAXMONST) tmp++; /* genocided? */
- X
- X--- 300,310 ----
- X
- X if (lev < 5)
- X while (tmp==WATERLORD)
- X! tmp=rnd(((x=monstlevel[lev-1])!=0)?x:1);
- X
- X else while (tmp==WATERLORD)
- X! tmp=rnd(((x=monstlevel[lev-1]-monstlevel[lev-4])!=0)?x:1)
- X! +monstlevel[lev-4];
- X
- X while (monster[tmp].genocided && tmp<MAXMONST) tmp++; /* genocided? */
- X
- X***************
- X*** 858,875 ****
- X case OLANCE:
- X c[LANCEDEATH]=0;
- X return;
- X! case OLARNEYE:
- X! monstnamelist[DEMONLORD] = ' ';
- X! monstnamelist[DEMONLORD+1] = ' ';
- X! monstnamelist[DEMONLORD+2] = ' ';
- X! monstnamelist[DEMONLORD+3] = ' ';
- X! monstnamelist[DEMONLORD+4] = ' ';
- X! monstnamelist[DEMONLORD+5] = ' ';
- X! monstnamelist[DEMONLORD+6] = ' ';
- X! monstnamelist[DEMONPRINCE] = ' ';
- X! monstnamelist[LUCIFER] = ' ';
- X cursors();
- X return;
- X case OPOTION:
- X case OSCROLL:
- X return;
- X--- 859,878 ----
- X case OLANCE:
- X c[LANCEDEATH]=0;
- X return;
- X! case OLARNEYE: {
- X! char c = objnamelist[0];
- X! monstnamelist[DEMONLORD ] = c;
- X! monstnamelist[DEMONLORD+1] = c;
- X! monstnamelist[DEMONLORD+2] = c;
- X! monstnamelist[DEMONLORD+3] = c;
- X! monstnamelist[DEMONLORD+4] = c;
- X! monstnamelist[DEMONLORD+5] = c;
- X! monstnamelist[DEMONLORD+6] = c;
- X! monstnamelist[DEMONPRINCE] = c;
- X! monstnamelist[LUCIFER] = c;
- X cursors();
- X return;
- X+ }
- X case OPOTION:
- X case OSCROLL:
- X return;
- Xdiff -c orig/header.h new/header.h
- X*** orig/header.h Sun Jul 16 01:06:56 1989
- X--- new/header.h Sun Jul 16 06:14:28 1989
- X***************
- X*** 2,20 ****
- X #include <sys/types.h>
- X #include <sys/stat.h>
- X
- X! #ifdef BSD
- X # include <sys/timeb.h>
- X # include <sys/time.h>
- X # include <sgtty.h>
- X! #else
- X # include <sys/times.h>
- X # include <termio.h>
- X! #endif
- X
- X #include <fcntl.h>
- X #include <ctype.h>
- X! #include <varargs.h>
- X! #include <pwd.h>
- X #include <signal.h>
- X #include <stdio.h>
- X
- X--- 2,26 ----
- X #include <sys/types.h>
- X #include <sys/stat.h>
- X
- X! #ifndef __MSDOS__
- X! # include <pwd.h>
- X! # ifdef BSD
- X # include <sys/timeb.h>
- X # include <sys/time.h>
- X # include <sgtty.h>
- X! # else
- X # include <sys/times.h>
- X # include <termio.h>
- X! # endif
- X! #endif /* __MSDOS__ */
- X
- X #include <fcntl.h>
- X #include <ctype.h>
- X! #ifdef __TURBOC__
- X! # include <stdarg.h>
- X! #else
- X! # include <varargs.h>
- X! #endif
- X #include <signal.h>
- X #include <stdio.h>
- X
- X***************
- X*** 69,84 ****
- X char qty;
- X };
- X
- X- /* this is the structure that holds the entire dungeon specifications */
- X- struct cel
- X- {
- X- short hitp; /* monster's hit points */
- X- char mitem; /* the monster ID */
- X- char item; /* the object's ID */
- X- short iarg; /* the object's argument */
- X- char know; /* have we been here before*/
- X- };
- X-
- X /* this is the structure for maintaining & moving the spheres of annihilation */
- X struct sphere
- X {
- X--- 75,80 ----
- X***************
- X*** 397,403 ****
- X extern int dayplay,enable_scroll,srcount,stayflag,yrepcount,userid,lfd,fd;
- X extern long initialtime,outstanding_taxes,skill[],gtime,c[],cbak[];
- X extern unsigned long randx;
- X- extern struct cel *cell;
- X extern struct monst monster[];
- X extern struct sphere *spheres;
- X extern struct _itm itm[];
- X--- 393,398 ----
- X***************
- X*** 454,461 ****
- X /* macro to seed the random number generator */
- X #define srand(x) (randx=x)
- X /* macros to generate random numbers 1<=rnd(N)<=N 0<=rund(N)<=N-1 */
- X! #define rnd(x) ((((randx=randx*1103515245+12345)>>7)%(x))+1)
- X! #define rund(x) ((((randx=randx*1103515245+12345)>>7)%(x)))
- X /* macros for miscellaneous data conversion */
- X #define min(x,y) (((x)>(y))?(y):(x))
- X #define max(x,y) (((x)>(y))?(x):(y))
- X--- 449,458 ----
- X /* macro to seed the random number generator */
- X #define srand(x) (randx=x)
- X /* macros to generate random numbers 1<=rnd(N)<=N 0<=rund(N)<=N-1 */
- X! #define rnd(x) ((int)((((randx=randx*1103515245+12345)>>7)%(x))+1))
- X! #define rund(x) ((int)((((randx=randx*1103515245+12345)>>7)%(x))))
- X! #define rndl(x) ((((randx=randx*1103515245+12345)>>7)%(x))+1)
- X! #define rundl(x) ((((randx=randx*1103515245+12345)>>7)%(x)))
- X /* macros for miscellaneous data conversion */
- X #define min(x,y) (((x)>(y))?(y):(x))
- X #define max(x,y) (((x)>(y))?(x):(y))
- Xdiff -c orig/help.c new/help.c
- X*** orig/help.c Sun Jul 16 01:01:55 1989
- X--- new/help.c Sun Jul 16 04:54:28 1989
- X***************
- X*** 86,92 ****
- X */
- X openhelp()
- X {
- X! if (lopen(helpfile)<0) {
- X lprintf("Can't open help file \"%s\" ",helpfile);
- X lflush();
- X sleep(4);
- X--- 86,92 ----
- X */
- X openhelp()
- X {
- X! if (lopen(helpfile, 0)<0) {
- X lprintf("Can't open help file \"%s\" ",helpfile);
- X lflush();
- X sleep(4);
- Xdiff -c orig/io.c new/io.c
- X*** orig/io.c Sun Jul 16 01:01:07 1989
- X--- new/io.c Sun Jul 16 04:37:38 1989
- X***************
- X*** 30,38 ****
- X *
- X * FILE OPEN / CLOSE ROUTINES
- X *
- X! * lcreat(filename) create a new file for write
- X! * lopen(filename) open a file for read
- X! * lappend(filename) open for append to an existing file
- X * lrclose() close the input file
- X * lwclose() close output file
- X * lflush() flush the output buffer
- X--- 30,38 ----
- X *
- X * FILE OPEN / CLOSE ROUTINES
- X *
- X! * lcreat(filename, mode) create a new file for write
- X! * lopen(filename, mode) open a file for read
- X! * lappend(filename, mode) open for append to an existing file
- X * lrclose() close the input file
- X * lwclose() close output file
- X * lflush() flush the output buffer
- X***************
- X*** 55,71 ****
- X * Note: ** entries are available only in termcap mode.
- X */
- X #include "header.h"
- X
- X! #ifdef BSD
- X # define GTTY(arg) (ioctl(0, TIOCGETP, arg))
- X # define STTY(arg) (ioctl(0, TIOCSETP, arg))
- X static struct sgttyb inittyb, curttyb;
- X! #else /* SYSV */
- X # define GTTY(arg) (ioctl(0, TCGETA, arg))
- X # define STTY(arg) (ioctl(0, TCSETAW, arg))
- X # define SPEED(x) ((x).c_cflag & CBAUD)
- X static struct termio inittyb, curttyb;
- X! #endif /* BSD */
- X
- X #define ON 1
- X #define OFF 0
- X--- 55,84 ----
- X * Note: ** entries are available only in termcap mode.
- X */
- X #include "header.h"
- X+ #ifdef __MSDOS__
- X+ # include <dos.h>
- X
- X! static short inittyb, curttyb;
- X! # define GTTY(arg) (-((*(arg)=(ioctl(0, 0, arg)&0xff)) == ((-1)&0xff)))
- X! # define STTY(arg) (-(ioctl(0, 1, (int *)(*(arg)))==-1))
- X!
- X! int keypad=0, rawio=0, nansi=0;
- X! int fg_color = 7, bg_color = 0;
- X! static int echo = 1;
- X!
- X! #else /* __MSDOS__ */
- X!
- X! # ifdef BSD
- X # define GTTY(arg) (ioctl(0, TIOCGETP, arg))
- X # define STTY(arg) (ioctl(0, TIOCSETP, arg))
- X static struct sgttyb inittyb, curttyb;
- X! # else /* SYSV */
- X # define GTTY(arg) (ioctl(0, TCGETA, arg))
- X # define STTY(arg) (ioctl(0, TCSETAW, arg))
- X # define SPEED(x) ((x).c_cflag & CBAUD)
- X static struct termio inittyb, curttyb;
- X! # endif /* BSD */
- X! #endif /* __MSDOS__ */
- X
- X #define ON 1
- X #define OFF 0
- X***************
- X*** 117,122 ****
- X--- 130,136 ----
- X }
- X curttyb = inittyb;
- X #ifndef BSD
- X+ # ifndef __MSDOS__
- X ospeed = SPEED(inittyb);
- X /* do not expand tabs - they might be needed inside a cm sequence */
- X if(curttyb.c_oflag & TAB3) {
- X***************
- X*** 123,128 ****
- X--- 137,143 ----
- X curttyb.c_oflag &= ~TAB3;
- X setctty();
- X }
- X+ # endif /* __MSDOS__ */
- X #endif /* BSD */
- X setuptty();
- X }
- X***************
- X*** 158,167 ****
- X ** function to setup all required terminal modes for game
- X */
- X setuptty(){
- X- int change = 0;
- X #ifdef BSD
- X scbr();
- X! #else /* SYSV */
- X if((curttyb.c_lflag & ECHO) != OFF){
- X curttyb.c_lflag &= ~ECHO;
- X change++;
- X--- 173,183 ----
- X ** function to setup all required terminal modes for game
- X */
- X setuptty(){
- X #ifdef BSD
- X scbr();
- X! #else
- X! # ifdef SYSV
- X! int change = 0;
- X if((curttyb.c_lflag & ECHO) != OFF){
- X curttyb.c_lflag &= ~ECHO;
- X change++;
- X***************
- X*** 176,181 ****
- X--- 192,204 ----
- X }
- X if(change)
- X setctty();
- X+ # else /* __MSDOS__ */
- X+ scbr();
- X+ if (rawio) {
- X+ curttyb |= 0x20;
- X+ setctty();
- X+ }
- X+ # endif
- X #endif /* BSD */
- X }
- X
- X***************
- X*** 186,199 ****
- X */
- X scbr()
- X {
- X! #ifdef BSD
- X curttyb.sg_flags |= CBREAK;
- X curttyb.sg_flags &= ~ECHO;
- X! #else /* SYSV */
- X curttyb.c_lflag &= ~ECHO;
- X curttyb.c_lflag &= ~ICANON;
- X! #endif /* BSD */
- X setctty();
- X }
- X
- X /*
- X--- 209,226 ----
- X */
- X scbr()
- X {
- X! #ifdef __MSDOS__
- X! echo = 0;
- X! #else
- X! # ifdef BSD
- X curttyb.sg_flags |= CBREAK;
- X curttyb.sg_flags &= ~ECHO;
- X! # else /* SYSV */
- X curttyb.c_lflag &= ~ECHO;
- X curttyb.c_lflag &= ~ICANON;
- X! # endif /* BSD */
- X setctty();
- X+ #endif /* __MSDOS__ */
- X }
- X
- X /*
- X***************
- X*** 203,216 ****
- X */
- X sncbr()
- X {
- X! #ifdef BSD
- X curttyb.sg_flags &= ~CBREAK;
- X curttyb.sg_flags |= ECHO;
- X! #else /* SYSV */
- X curttyb.c_lflag |= ECHO;
- X curttyb.c_lflag |= ICANON;
- X! #endif /* BSD */
- X setctty();
- X }
- X
- X /*
- X--- 230,247 ----
- X */
- X sncbr()
- X {
- X! #ifdef __MSDOS__
- X! echo = 1;
- X! #else
- X! # ifdef BSD
- X curttyb.sg_flags &= ~CBREAK;
- X curttyb.sg_flags |= ECHO;
- X! # else /* SYSV */
- X curttyb.c_lflag |= ECHO;
- X curttyb.c_lflag |= ICANON;
- X! # endif /* BSD */
- X setctty();
- X+ #endif /* not __MSDOS__ */
- X }
- X
- X /*
- X***************
- X*** 220,227 ****
- X--- 251,291 ----
- X {
- X char byt;
- X
- X+ #ifdef __MSDOS__
- X+ static int kpd_trans[] = {
- X+ 'y', 'k', 'u', -1,
- X+ 'h', '.', 'l', -1,
- X+ 'b', 'j', 'n',
- X+ 'i', '.',
- X+ };
- X+ static int kpd_shift_trans[] = {
- X+ 'i', 'B', 'J', 'N', 'H', '.', 'L', 'Y', 'K', 'U',
- X+ };
- X+
- X lflush(); /* be sure output buffer is flushed */
- X+ try_again:
- X+ byt = echo ? getche() : getch();
- X+ if (byt == '\r') byt = '\n';
- X+ if (echo) return byt;
- X+ if (keypad && byt == '\0') { /* translate extended scan codes */
- X+ byt = getch();
- X+ if (byt < 71 || byt >= 71 + sizeof(kpd_trans)/sizeof(kpd_trans[0]))
- X+ goto try_again;
- X+ byt = kpd_trans[byt-71];
- X+ if (byt == -1) goto try_again;
- X+ }
- X+ else if (keypad && isdigit(byt)) {
- X+ union REGS regs;
- X+ regs.h.ah = 2;
- X+ int86(0x16, ®s, ®s); /* get shift state */
- X+ if (regs.h.al & 0x03) /* is either shift key down? */
- X+ byt = kpd_shift_trans[byt-'0'];
- X+ }
- X+
- X+ #else
- X+ lflush(); /* be sure output buffer is flushed */
- X read(0,&byt,1); /* get byte from terminal */
- X+ #endif
- X return(byt);
- X }
- X
- X***************
- X*** 254,270 ****
- X--- 318,347 ----
- X * Returns nothing of value.
- X */
- X /*VARARGS*/
- X+ #ifdef __TURBOC__
- X+ lprintf(char *fmt, ...)
- X+ #else
- X lprintf(va_alist)
- X va_dcl
- X+ #endif
- X {
- X va_list ap; /* pointer for variable argument list */
- X+ #ifndef __TURBOC__
- X char *fmt;
- X+ #endif
- X char *outb,*tmpb;
- X long wide,left,cont,n; /* data for lprintf */
- X char db[12]; /* %d buffer in lprintf */
- X
- X+ #ifdef __TURBOC__
- X+ va_start(ap, fmt); /* initialize the varargs pointer */
- X+ #else
- X va_start(ap); /* initialize the var args pointer */
- X+ #endif
- X+
- X+ #ifndef __TURBOC__
- X fmt = va_arg(ap, char *); /* pointer to format string */
- X+ #endif
- X if (lpnt >= lpend) lflush();
- X outb = lpnt;
- X for ( ; ; ) {
- X***************
- X*** 310,316 ****
- X case 's':
- X tmpb = va_arg(ap, char *);
- X if (wide==0) {
- X! while (*outb++ = *tmpb++);
- X --outb;
- X }
- X else {
- X--- 387,393 ----
- X case 's':
- X tmpb = va_arg(ap, char *);
- X if (wide==0) {
- X! while ((*outb++ = *tmpb++)!=0);
- X --outb;
- X }
- X else {
- X***************
- X*** 318,324 ****
- X if (left)
- X while (n-- > 0)
- X *outb++ = ' ';
- X! while (*outb++ = *tmpb++)
- X ;
- X --outb;
- X if (left==0)
- X--- 395,401 ----
- X if (left)
- X while (n-- > 0)
- X *outb++ = ' ';
- X! while ((*outb++ = *tmpb++)!=0)
- X ;
- X --outb;
- X if (left==0)
- X***************
- X*** 437,444 ****
- X
- X if (ipoint != iepoint)
- X return(inbuffer[ipoint++]);
- X- if (iepoint!=MAXIBUF)
- X- return(0);
- X if ((i=read(fd,inbuffer,MAXIBUF))<=0) {
- X if (i!=0)
- X fprintf(stderr,"error reading from input file\n");
- X--- 514,519 ----
- X***************
- X*** 567,585 ****
- X }
- X
- X /*
- X! * lcreat(filename) Create a new file for write
- X * char *filename;
- X *
- X * lcreat((char*)0); means to the terminal
- X * Returns -1 if error, otherwise the file descriptor opened.
- X */
- X! lcreat(str)
- X char *str;
- X {
- X lpnt = lpbuf;
- X lpend = lpbuf+BUFBIG;
- X if (str==0) return(lfd=1);
- X! if ((lfd=creat(str,0644)) < 0) {
- X lfd=1;
- X lprintf("error creating file <%s>\n",str);
- X lflush();
- X--- 642,668 ----
- X }
- X
- X /*
- X! * lcreat(filename, mode) Create a new file for write
- X * char *filename;
- X+ * int mode;
- X *
- X+ * mode is 0 for text files and 1 for binary files.
- X * lcreat((char*)0); means to the terminal
- X * Returns -1 if error, otherwise the file descriptor opened.
- X */
- X! lcreat(str, mode)
- X char *str;
- X+ int mode;
- X {
- X lpnt = lpbuf;
- X lpend = lpbuf+BUFBIG;
- X if (str==0) return(lfd=1);
- X! #ifdef __MSDOS__
- X! mode = (mode ? O_BINARY : O_TEXT) | O_WRONLY | O_CREAT | O_TRUNC;
- X! #else
- X! mode = O_WRONLY | O_CREAT | O_TRUNC;
- X! #endif
- X! if ((lfd=open(str,mode,0644)) < 0) {
- X lfd=1;
- X lprintf("error creating file <%s>\n",str);
- X lflush();
- X***************
- X*** 589,606 ****
- X }
- X
- X /*
- X! * lopen(filename) Open a file for read
- X * char *filename;
- X *
- X * lopen(0) means from the terminal
- X * Returns -1 if error, otherwise the file descriptor opened.
- X */
- X! lopen(str)
- X char *str;
- X {
- X ipoint = iepoint = MAXIBUF;
- X if (str==0) return(fd=0);
- X! if ((fd=open(str,0)) < 0) {
- X lwclose();
- X lfd=1;
- X lpnt=lpbuf;
- X--- 672,697 ----
- X }
- X
- X /*
- X! * lopen(filename, mode) Open a file for read
- X * char *filename;
- X+ * int mode;
- X *
- X+ * mode is 0 for text files and 1 for binary files.
- X * lopen(0) means from the terminal
- X * Returns -1 if error, otherwise the file descriptor opened.
- X */
- X! lopen(str, mode)
- X char *str;
- X+ int mode;
- X {
- X ipoint = iepoint = MAXIBUF;
- X if (str==0) return(fd=0);
- X! #ifdef __MSDOS__
- X! mode = (mode ? O_BINARY : O_TEXT) | O_RDONLY;
- X! #else
- X! mode = O_RDONLY;
- X! #endif
- X! if ((fd=open(str,mode)) < 0) {
- X lwclose();
- X lfd=1;
- X lpnt=lpbuf;
- X***************
- X*** 610,628 ****
- X }
- X
- X /*
- X! * lappend(filename) Open for append to an existing file
- X * char *filename;
- X *
- X * lappend(0) means to the terminal
- X * Returns -1 if error, otherwise the file descriptor opened.
- X */
- X! lappend(str)
- X char *str;
- X {
- X lpnt = lpbuf;
- X lpend = lpbuf+BUFBIG;
- X if (str==0) return(lfd=1);
- X! if ((lfd=open(str,2)) < 0) {
- X lfd=1;
- X return(-1);
- X }
- X--- 701,727 ----
- X }
- X
- X /*
- X! * lappend(filename, mode) Open for append to an existing file
- X * char *filename;
- X+ * int mode;
- X *
- X+ * mode is 0 for text files and 1 for binary files.
- X * lappend(0) means to the terminal
- X * Returns -1 if error, otherwise the file descriptor opened.
- X */
- X! lappend(str, mode)
- X char *str;
- X+ int mode;
- X {
- X lpnt = lpbuf;
- X lpend = lpbuf+BUFBIG;
- X if (str==0) return(lfd=1);
- X! #ifdef __MSDOS__
- X! mode = (mode ? O_BINARY : O_TEXT) | O_WRONLY | O_APPEND;
- X! #else
- X! mode = O_WRONLY | O_APPEND;
- X! #endif
- X! if ((lfd=open(str,mode)) < 0) {
- X lfd=1;
- X return(-1);
- X }
- X***************
- X*** 664,670 ****
- X if (lpnt >= lpend)
- X lflush();
- X str2 = lpnt;
- X! while (*str2++ = *str++)
- X ;
- X lpnt = str2 - 1;
- X }
- X--- 763,769 ----
- X if (lpnt >= lpend)
- X lflush();
- X str2 = lpnt;
- X! while ((*str2++ = *str++)!=0)
- X ;
- X lpnt = str2 - 1;
- X }
- X***************
- X*** 708,713 ****
- X--- 807,813 ----
- X */
- X init_term()
- X {
- X+ #ifndef __MSDOS__
- X char termbuf[1024];
- X char *capptr = cap+10;
- X char *term;
- X***************
- X*** 760,768 ****
- X fflush(stderr);
- X exit(1);
- X }
- X /* get memory for decoded output buffer*/
- X if ((outbuf=malloc(BUFBIG+16))==0) {
- X! fprintf(stderr,"Error malloc'ing memory for decoded output buffer\n");
- X fflush(stderr);
- X died(-285); /* malloc() failure */
- X }
- X--- 860,896 ----
- X fflush(stderr);
- X exit(1);
- X }
- X+ #else /* __MSDOS__ */
- X+
- X+ static char sobuf[20], sebuf[20];
- X+
- X+ CM = "\033[%d;%dH"; /* Cursor motion */
- X+ CE = "\033[K"; /* Clear to eoln */
- X+ CL = "\033[2J"; /* Clear screen */
- X+
- X+ /* OPTIONAL */
- X+ if (nansi) {
- X+ AL = "\033[L"; /* Insert line */
- X+ DL = "\033[M"; /* Delete line */
- X+ }
- X+ else {
- X+ AL = NULL; /* Insert line */
- X+ DL = NULL; /* Delete line */
- X+ }
- X+
- X+ sprintf(sobuf, "\033[1;%d;%dm", fg_color + 30, bg_color + 40);
- X+ sprintf(sebuf, "\033[0;%d;%dm", fg_color + 30, bg_color + 40);
- X+
- X+ SO = sobuf; /* Begin standout mode */
- X+ SE = sebuf; /* End standout mode */
- X+ CD = NULL; /* Clear to end of display */
- X+
- X+ puts(sebuf);
- X+ #endif /* __MSDOS__ */
- X+
- X /* get memory for decoded output buffer*/
- X if ((outbuf=malloc(BUFBIG+16))==0) {
- X! fprintf(stderr,"Error malloc'ing memory for decoded output buffer\n");
- X fflush(stderr);
- X died(-285); /* malloc() failure */
- X }
- X***************
- X*** 839,844 ****
- X--- 967,990 ----
- X {
- X enable_scroll = -1;
- X }
- X+
- X+ #ifdef __MSDOS__
- X+
- X+ void tputs(char *s, int x, int (*outch)())
- X+ {
- X+ while (*s) (*outch)(*s++);
- X+ ++x;
- X+ }
- X+
- X+ char *tgoto(char *s, int x, int y)
- X+ {
- X+ static char buf[12];
- X+
- X+ sprintf(buf, s, y+1, x+1);
- X+ return buf;
- X+ }
- X+
- X+ #endif /* __MSDOS__ */
- X
- X /*
- X * lflush() Flush the output buffer
- SHAR_EOF
- if test 50636 -ne "`wc -c < 'patch02.1'`"
- then
- echo shar: error transmitting "'patch02.1'" '(should have been 50636 characters)'
- fi
- fi # end of overwriting check
- # End of shell archive
- exit 0
-